package com.milo.coding.proxy.dyna.cglib;

import com.milo.coding.proxy.dyna.IUserService;
import com.milo.coding.proxy.dyna.UserServiceImpl;
import net.sf.cglib.proxy.Enhancer;

/**
 * @Auther milo
 * @Description
 * @Date 2021-02-28 14:10
 */
public class Main {
    /**
     *  net.sf.cglib.proxy.Enhancer – 主要的增强类
     *  net.sf.cglib.proxy.MethodInterceptor – 主要的方法拦截类，它是Callback接口的子接口，需要用户实现
     *  net.sf.cglib.proxy.MethodProxy – JDK的java.lang.reflect.Method类的代理类，可以方便的实现对源对象方法的调用,如使用：
     *  Object o = methodProxy.invokeSuper(proxy, args);//虽然第一个参数是被代理对象，也不会出现死循环的问题。
     *
     */
    public static void main(String[] args) {
        CglibProxy cglibProxy = new CglibProxy();
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(UserServiceImpl.class);
        enhancer.setCallback(cglibProxy);
        IUserService userService = (IUserService)enhancer.create();
        System.out.println(userService.getName());
        System.out.println(userService.getAge());
    }
}
